A peer-to-peer architecture comprises a multitude of interconnected peers, some of which reside behind a network address translator (NAT) and/or a firewall. In order for peers to connect with one another, each peer typically sends out contact information associated with the respective peer. This contact information may include an Internet Protocol (IP) address of the peer, a type of NAT behind which the peer operates, and, if applicable, a NAT address of the peer. When other peers receive this contact information, these other peers may choose to use this contact information to connect with the peer.
A key part of the contact information that peers send out is the NAT type of the peers. However, in order to send out this information to other peers, each peer must first learn the peer's own NAT type. While reliable, traditional techniques are cumbersome and require an undue amount of time.